#include "Buffer.h"
  Buffer::Buffer() : head(0), tail(0), count(0) {
        memset(buffer, 0, sizeof(buffer));  // 初始化缓冲区为0
    }
// 向缓冲区写入数据
bool Buffer::write(const unsigned char *data, size_t len)
{
    std::lock_guard<std::mutex> lock(mutex); // 锁住缓冲区，保证线程安全

    // 判断缓冲区是否有足够空间
    if (count + len > BUFFER_SIZE)
    {
        return false; // 缓冲区已满，返回失败
    }

    // 写入数据
    for (size_t i = 0; i < len; ++i)
    {
        buffer[tail] = data[i];
        tail = (tail + 1) % BUFFER_SIZE; // 更新写指针，循环回绕
    }
    count += len;
    return true; // 成功写入
}

// 从缓冲区读取数据
size_t Buffer::read(unsigned char *data, size_t len)
{
    std::lock_guard<std::mutex> lock(mutex); // 锁住缓冲区，保证线程安全

    // 判断缓冲区是否有足够数据
    if (count == 0)
    {
        return 0; // 缓冲区为空，返回0
    }

    // 计算实际读取的数据量
    size_t bytes_to_read = std::min(len, count);

    // 读取数据
    for (size_t i = 0; i < bytes_to_read; ++i)
    {
        data[i] = buffer[head];
        head = (head + 1) % BUFFER_SIZE; // 更新读指针，循环回绕
    }
    count -= bytes_to_read;
    return bytes_to_read; // 返回读取的字节数
}

// 判断缓冲区是否有数据
int Buffer::has_data()
{
    
    std::lock_guard<std::mutex> lock(mutex); // 锁住缓冲区，保证线程安全
    return count;                        // 如果有数据，返回true；否则返回false
}
